package bancosys.tec.security.authorization;

import java.io.Serializable;

/**
 * Interface que define uma permissão.
 * 
 * @created 25/03/2008
 * @author Gustavo Almeida
 */
public interface Permission extends Serializable {
    /**
     * Testa uma determinada permissao contra essa instância.
     * 
     * @param type tipo da permissão.
     * @param permissionId id da permissão.
     * @return <code>true</code> se a permissão testada for "autorizada" por essa instância, <code>false</code> caso contrário.
     */
    boolean match(Class<? extends Permission> type, String permissionId);

    /**
     * Devovle o tipo da permissão.
     * 
     * @return o tipo da permissão.
     */
    Class<? extends Permission> getType();

    /**
     * Devolve o id da permissão.
     * 
     * @return o id da permissão.
     */
    String getPermissionId();
}
